/* ************************************************************************************************

	Copyright (c) 2005-2006, IGR
	All Rights Reserved.
	Licensed under the Apache License version 2.0 or above.
	For more information on licensing, see:
        http://www.apache.org/licenses/


 ************************************************************************************************
 Objet SIMPLEMENU
 VERSION:0.85
 DATE:16/03/2006
 ************************************************************************************************
Init parameter :

 Name:               Code name          
 width:              Width 

 objPar              object of parameter
posFixe    			true if the menu has a fixe position
posTop    			top if posFix
posLeft    			left if posFix
avecCoche        	if true an image show the clicked item
 	
*************************************************************************************************/


// *************************************
// CONSTRUCTOR
// *************************************


rialto.widget.simpleMenu=function (objPar){
    
     
    if (!objPar){objPar={};}
    
    objPar.name = "menu";       
    objPar.height = 0;
    if (!objPar.width){
		objPar.width=200;
	}
    
    //base constructor
	this.base = rialto.widget.AbstractComponent;    
    this.base(objPar);
    //default value
    this.posFixe = false;    
    this.posTop=0;        
    this.posLeft=0;
    //this.className="divMenu";
    this.avecCoche=false;
    
        
    //set the value with the properties of the objPar object
    if (objPar != null){               
        if (objPar.name){
            this.name = objPar.name;        
        }                        
        if (rialto.lang.isNumber(objPar.width)){
            this.width = objPar.width;        
        }
        if (rialto.lang.isBoolean(objPar.posFixe)){
            this.posFixe = objPar.posFixe;        
        }
        if (rialto.lang.isNumber(objPar.posTop)){
            this.posTop = objPar.posTop;        
        }
        if (rialto.lang.isNumber(objPar.posLeft)){
            this.posLeft = objPar.posLeft;        
        }
        if (rialto.lang.isString(objPar.className,true)){
            this.className = objPar.className;        
        }           
        if (rialto.lang.isBoolean(objPar.avecCoche)){
            this.avecCoche = objPar.avecCoche;        
        }        
    } 
    
    var oThis=this;    
    
    
    //item array and child menu
    this.tabItem=new Array;
    this.arrChildMenu=new Array;
    
    //masque    
    this.zoneMasque = document.createElement('DIV');        
    this.zoneMasque.style.display = 'none';
    this.zoneMasque.style.width =  '100%';
    this.zoneMasque.style.height = '100%';    
    this.zoneMasque.style.zIndex =10000;
    this.zoneMasque.className = 'ecranMasquetransparent';                    
    this.zoneMasque.style.display='none';
    document.body.appendChild(this.zoneMasque);               
    this.zoneMasque.onclick=function(e){        
        oThis.fermezoneMenu();
    }        
    this.zoneMasque.oncontextmenu=function(e){                    
        oThis.fermezoneMenu();        
    }    
    //Menu
    this.divExt=document.createElement("DIV");
    this.divExt.className=this.className;
    this.zoneMasque.appendChild(this.divExt);    
    this.divExt.style.width=this.width;
    this.divExt.style.position="absolute";
    this.ouvert=false;
    this.divExt.style.visibility='hidden';
    //indique s'il s'agit d'un menu fils
    this.isMenufils=false;
    
}

rialto.widget.simpleMenu.prototype = new rialto.widget.AbstractComponent;

rialto.widget.simpleMenu.prototype.nbreInstance=0;

//Change le left
rialto.widget.simpleMenu.prototype.release=function(){
	for(var i=0;i<this.tabItem.length;i++){
		this.tabItem[i].remove();
   	}	  
   	this.zoneMasque.onclick=null;
   	this.zoneMasque.oncontextmenu=null;
   	this.divExt.parentNode.removeChild(this.divExt);
   	this.zoneMasque.parentNode.removeChild(this.zoneMasque);
   	//remove global reference                          	 
   	rialto.session.objects[this.id]=null;
}

//Change le left
rialto.widget.simpleMenu.prototype.setPosLeft=function(left){  
   this.posLeft=left;
   this.divExt.style.left=this.posLeft;   
}

//Change le top
rialto.widget.simpleMenu.prototype.setPosTop=function(top){   
   this.posTop=top;
   this.divExt.style.top=this.posTop;   
}

//Change le width
rialto.widget.simpleMenu.prototype.setWidth=function(width){
   this.width=width;
   this.divExt.style.width=width;
   //on change le width des item
   for(var i=0;i<this.tabItem.length;i++){
       this.tabItem[i].setWidth(this.width);
   }   
}

//Change le height
rialto.widget.simpleMenu.prototype.setHeight=function(height){
   this.height=height;
   this.divExt.style.height=height;
}

//Cahnge le className
rialto.widget.simpleMenu.prototype.setClassName=function(classname){
   this.divExt.className=classname;
}

//Vide le menu
rialto.widget.simpleMenu.prototype.clear=function(){

	for(var i=0;i<this.tabItem.length;i++){
		this.tabItem[i].remove();
   	}
   this.divExt.innerHTML="";
   //on vide le tableau
   this.tabItem=new Array;
   //vide les menu fils
   for (var i=0;i<this.arrChildMenu.length;i++){
       this.zoneMasque.removeChild(this.arrChildMenu[i].divExt);
   }
   this.arrChildMenu=new Array;
}

//Ajoute un objet HTML
rialto.widget.simpleMenu.prototype.add=function(obj){
    this.divExt.appendChild(obj);
}

//Ajoute un objet Item
rialto.widget.simpleMenu.prototype.addItem=function(objPar){
    var oThis=this;
    
    //on fixe le width
    
    objPar.width=this.width;    
    //on cree un item    
    var item=new rialto.widget.simpleMenuItem(objPar);
    //on ajoutel 'item au tableau
    var ind=this.tabItem.push(item);    
    //on referencie au niveau de l'item le menu et son indice
    item.parMenu=this;
    item.ind=ind-1
    //on ajoute les elmts HTML
    this.add(item.divExt);   
    //si l'item ? un menuFils
    if(item.menuFils){
        //ajout du menu fils
        this.addMenuFils(item.menuFils)
    }    
    return item;
}


//Ajoute un menu fils
rialto.widget.simpleMenu.prototype.addMenuFils=function(objMenuFils){
    
    //indique qu'il s'agit d'un menu Fils
    objMenuFils.isMenufils=true;
    //R?f?rencie le menu pere
    objMenuFils.menuPere=this;
    //ajoute au tableau des menu fils
    this.arrChildMenu.push(objMenuFils);
    //ajout le tableau des menu fils du menu fils
    this.arrChildMenu=this.arrChildMenu.concat(objMenuFils.arrChildMenu);
    //le menu fils devient fixe
    objMenuFils.posFixe=true;        
    //ajoute le menu fils et ses propres menu fils dans le pere
    this.zoneMasque.appendChild(objMenuFils.divExt);
       
    for(var i=0;i<objMenuFils.arrChildMenu.length;i++){
        this.zoneMasque.appendChild(objMenuFils.arrChildMenu[i].divExt);    
    }           
    //enleve la zone masque du menu fils
    if(objMenuFils.zoneMasque){
        document.body.removeChild(objMenuFils.zoneMasque);
        objMenuFils.zoneMasque=null;
    }
}

//ajoute une s?paration entre 2 elements
rialto.widget.simpleMenu.prototype.addSeparation=function() {
    var oThis=this;
    //pour ajouter une s?paration dans le menu    
    divExt=document.createElement("DIV");
    divExt.style.position="relative";
    //divExt.style.border="1px solid blue";
    divExt.style.width=this.width;
    divExt.style.height=10;
    divExt.innerHTML="<HR/>";
    divExt.onmouseover= function (e){
        if (!e) var e = window.event;    
        //alert(oThis.menuFilsActif);
        if(oThis.menuFilsActif){        
        //on ferme le menufils actif        
            oThis.menuFilsActif.fermezoneMenu();
            oThis.menuFilsActif="";
        }        
        stopEvent(e);
    }
    //var sep=document.createElement("HR");
    this.add(divExt); 
}

//Ferme la zone de menu
rialto.widget.simpleMenu.prototype.fermezoneMenu=function(){    
    //ferme les menu fils
    for(var i=0;i<this.arrChildMenu.length;i++){
        this.arrChildMenu[i].fermezoneMenu();    
    }    
    this.divExt.style.visibility='hidden';
    
//    this.divExt.style.overflow = 'hidden';

    this.divExt.style.height = '';

	if (this.divExt.saveWidth != undefined){
//		this.divExt.saveWidth = '';
    	this.divExt.style.width = this.divExt.saveWidth;
    }

    //si ce n'est pas un menu fils on ferme le masque
    if(!this.isMenufils){this.zoneMasque.style.display='none';}
    this.ouvert=false;
    this.onClose();
}



rialto.widget.simpleMenu.prototype.affichezoneMenu=function(e,shift){   
//=======================================================
// display the list of tabs for choice

    //joue sur la visibilite pour avoir les offsetWidth
   
    if (!this.isMenufils)
    	{this.zoneMasque.style.display='block';}

    var base = this.posFixe ? {top:this.posTop,left:this.posLeft}
							: e ;
	var heightAvailable =_ru.$placeInViewPort(this.divExt,base,shift);
	// too large --> overflow : auto
    if (heightAvailable > 0) {
    	this.divExt.style.overflow = 'auto';
    	
    	/*if (!isNaN(parseInt(this.divExt.style.width))) {
	    	this.divExt.saveWidth = this.divExt.style.width;
	    	this.divExt.style.width = parseInt(this.divExt.style.width) 
    								+ 17;  // for auto-lift
    	}*/
    	this.divExt.style.height = heightAvailable;
    }

    this.ouvert=true;
    //si on ouvre un menu fils on indique ? son pere qu'il est le menu actif
    if(this.isMenufils){
        this.menuPere.menuFilsActif=this;    
    }
    this.divExt.style.visibility='visible';
    //stopEvent(e);
}
      
//Gestion du click
rialto.widget.simpleMenu.prototype.clickItem=function(item){
    //si avec coche on gere la coche
    if(this.avecCoche){
        // image coche dans l'image gauche de l'item
        item.imgG.style.background="url(images/imgTableau/coche.gif)";      
    }    
    this.onclick(item);
    
}

//
rialto.widget.simpleMenu.prototype.onOverItem=function(item){
    if(this.menuFilsActif){        
        //si on a un menu fils ouvert on le ferme
        this.menuFilsActif.fermezoneMenu();
        this.menuFilsActif="";        
    }    
    this.onOver(item);
}

//FONCTION SPECIFIQUE AUX CONTEXTE


rialto.widget.simpleMenu.prototype.onClose=function(){
}

rialto.widget.simpleMenu.prototype.onOver=function(item){
}

rialto.widget.simpleMenu.prototype.onOut=function(item){
}

rialto.widget.simpleMenu.prototype.onclick=function(item){
}

/************************************************************************************************
 Objet ITEM MENU
 VERSION:0.85
 DATE:16/03/2006
 ************************************************************************************************
Init parameter in objPar (object of parameter):
width			Width (in pixel or %)
height			Height (in pixel or %
text			text of the item
srcG			src of the left image 	
srcD			src of the right image 	
clOver			classname to use on mouseover
clOut			classname to use on mouseout
enable			enable state on create
boolcoche		if true an image show the clicked item
bNotOut			if true no out event raise
menuFils		child menu
*************************************************************************************************/



// *************************************
// CONSTRUCTOR
// *************************************


rialto.widget.simpleMenuItem=function(objPar){
    
    
    //default value    
    this.text = "";                 
    this.srcG="";                   
    this.srcD="";                   
    this.clOver="itemMenuOn";       
    this.clOut="itemMenuOff";
    this.enable=true;
    this.width=100;
    this.height=23;
    this.boolcoche=false;
    this.bNotOut=false;
    this.menuFils="";
    
    //set the value with the properties of the objPar object
    if (objPar){  
        if (rialto.lang.isString(objPar.text)){
            this.text = objPar.text;    
        }                        
        if (objPar.srcG){
            this.srcG = objPar.srcG;        
        } 
        if (objPar.srcD){
            this.srcD = objPar.srcD;        
        } 
        if (objPar.clOver){
            this.clOver = objPar.clOver;        
        }
        if (objPar.clOut){
            this.clOut = objPar.clOut;        
        }
        if (rialto.lang.isBoolean(objPar.enable)){
            this.enable = objPar.enable;        
        }
        if (rialto.lang.isNumber(objPar.width)){
            this.width = objPar.width;        
        }
        if (rialto.lang.isNumber(objPar.height) && objPar.height>0){
            this.height = objPar.height;        
        }
        if (rialto.lang.isBoolean(objPar.boolcoche)){
            this.boolcoche = objPar.boolcoche;        
        }
        if (rialto.lang.isBoolean(objPar.bNotOut)){
            this.bNotOut = objPar.bNotOut;        
        }
        if (objPar.menuFils){
            //Reverse link
            this.menuFils = objPar.menuFils;
            this.menuFils.item=this;
			//right image
            this.srcD = rialtoConfig.pathRialtoE + "images/fleches/flecheD23-19.gif";            
        }        
    }
    
    var oThis=this;   
    
    //GENERATION OF DOM ELEMENTS
    //divExt
    this.divExt=document.createElement("DIV");
    this.divExt.style.position="relative";
    this.divExt.style.width=this.width;
    this.divExt.style.height=this.height;
    
    //decalage sur le width du texte du aux images
    this.decal=0;
    
    //image gauche                
    if(this.srcG || this.boolcoche){
        this.decal=19;
        this.imgG=document.createElement("DIV");        
        this.imgG.className="imgItemMenu";
        this.imgG.style.background="url("+this.srcG+")";
        this.divExt.appendChild(this.imgG);        
    }
    //texte du noeud
    this.divText=document.createElement("DIV");         
    this.divText.className="itemText"; 
    this.divText.style[ATTRFLOAT]='left';                
    this.divText.innerHTML=this.text;            
    this.divText.title=this.text;
    this.divExt.appendChild(this.divText);            
    //image droite
    if(this.srcD){
        this.decal+=19;
        this.imgD=document.createElement("DIV");
        this.imgD.style.background="url("+this.srcD+")";
        this.imgD.className="imgItemMenu";
        this.divExt.appendChild(this.imgD);                    
    }
    
    //taille du texte
    this.divText.style.width=this.width-this.decal;
    
    //definition des over out
    this.divExt.onmouseover= function (e){
        if (!e) var e = window.event;        
        oThis.over(e);        
        //stopEvent(e)        
    }
    if(!this.bNotOut){
	    this.divExt.onmouseout= function (e){
	        if (!e) var e = window.event;                
	        oThis.out(e);        
	        //stopEvent(e);
	    }
	}
	    
    this.divExt.onclick= function (e){
        this.className=oThis.clOut;
        if (!e) var e = window.event;        
        oThis.parMenu.clickItem(oThis);
        //stopEvent(e);
    }

}

//to remove an item
rialto.widget.simpleMenuItem.prototype.remove=function(){
	this.divExt.parentNode.removeChild(this.divExt);
	this.divExt.onmouseover=null;
	this.divExt.onmouseout=null;
	this.divExt.onclick=null;
}


//fonction qui change le width de l'item
rialto.widget.simpleMenuItem.prototype.setWidth=function(width){
   this.width=width;
   //taille de l'item
   this.divExt.style.width=this.width;
   //taille du texte
   this.divText.style.width=this.width-this.decal;
}


rialto.widget.simpleMenuItem.prototype.over=function(e) {
    this.divExt.className=this.clOver;
    this.parMenu.onOverItem(this);
    if(this.menuFils){
        //positionne par rapport ? l'image
        this.menuFils.setPosTop(compOffsetTop(this.imgD)+2);
        this.menuFils.setPosLeft(compOffsetLeft(this.imgD)+10);            
        //affiche le menu
        this.menuFils.affichezoneMenu(e);        
    }          
}

rialto.widget.simpleMenuItem.prototype.out=function(e) {
    this.divExt.className=this.clOut;
	this.parMenu.onOut(this);  
}

rialto.widget.simpleMenuItem.prototype.changeTitre=function(titre) {
    //fonction pour changer le texte d'un item
    this.text=titre;
    this.divText.innerHTML=this.text;
}

rialto.widget.simpleMenuItem.prototype.setStyle=function(obStyle) {

    for (prop in obStyle){
        try {                                
            this.divText.style[prop]=obStyle[prop];
        }
        catch (erreur) {}
    }
    this.obStyle=obStyle;        
}